package com.obelisco.vista.seguridad;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.ResourceBundle;

import com.obelisco.modelo.data.CarpetaTransaccion;
import com.obelisco.modelo.data.Grupo;
import com.obelisco.modelo.data.Operacion;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.servicios.seguridad.IServicioAdministrarCarpetas;
import com.obelisco.vista.componentes.ComponenteDatosListener;
import com.obelisco.vista.componentes.DobleLista;
import com.obelisco.vista.componentes.PaneSubirImagen;
import com.obelisco.vista.componentes.TipoFuncion;
import com.obelisco.vista.controles.BindingSelectField;
import com.obelisco.vista.controles.BindingTextArea;
import com.obelisco.vista.controles.BindingTextField;

import nextapp.echo2.app.ContentPane;
import nextapp.echo2.extras.app.TabPane;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;
import nextapp.echo2.app.Grid;
import echopointng.ContentPaneEx;
import echopointng.GroupBox;
import echopointng.ImageMap;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.TextField;
import echopointng.RichTextArea;
import nextapp.echo2.app.layout.GridLayoutData;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.TextArea;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.layout.ColumnLayoutData;
import nextapp.echo2.app.Button;

public class PaneTransaccion extends ContentPaneEx implements
		ComponenteDatosListener {

	private IServicioAdministrarCarpetas servicioAdministrarCarpetas;

	private ResourceBundle resourceBundle;

	private BindingTextField txtNombre;

	private BindingTextField txtClase;

	private BindingTextArea txtDescripcion;

	private BindingTextField txtSpring;
	
	private BindingTextField txtAccesoRapido;


	private BindingSelectField cmbTipo;

	private BindingSelectField cmbDespliegue;

	private RichTextArea txtAyuda;

	private DobleLista dblFunciones;

	private DobleLista dblGrupos;

	private PaneSubirImagen icono;
	
	private com.obelisco.vista.controles.Label lblNombreDepende;


	/**
	 * Creates a new <code>PaneTransaccion</code>.
	 */
	public PaneTransaccion() {
		super();

		// Add design-time configured components.
		initComponents();
	}

	public void onCancelar() {
		// TODO Auto-generated method stub
		onConsultar(transaccion);

	}

	public void onConfirmarCambios(Object objeto, TipoFuncion tipo,
			String nombre) {
		// TODO Auto-generated method stub
		if (tipo == TipoFuncion.INCLUIR) {
			transaccion.getCarpeta().getTransacciones().add(transaccion);
		}

		transaccion.getOperaciones().clear();
		for (Object asignado : dblFunciones.getDatosDestino()) {
			transaccion.getOperaciones().add((Operacion) asignado);
		}
		
		transaccion.getGrupos().clear();
		for (Object asignado : dblGrupos.getDatosDestino()) {
			transaccion.getGrupos().add((Grupo) asignado);
		}

		transaccion.setAyuda(txtAyuda.getText());

		onConsultar(transaccion);

	}

	public void onConfirmarEliminacion(Object object) {
		// TODO Auto-generated method stub

	}

	public void onConsultar(Object objeto) {
		// TODO Auto-generated method stub

		txtNombre.setEnabled(false);
		txtDescripcion.setEnabled(false);
		txtSpring.setEnabled(false);
		txtClase.setEnabled(false);
		txtAccesoRapido.setEnabled(false);

		cmbTipo.setEnabled(false);
		cmbDespliegue.setEnabled(false);
		
		dblFunciones.setEnabled(false);
		dblGrupos.setEnabled(false);
		txtAyuda.setEnabled(false);
		icono.setEnabled(false);

	}

	public void onCrear() {
		// TODO Auto-generated method stub

	}

	public void onFuncionPersonalizada(Object objeto, TipoFuncion funcion,
			String nombre) {
		// TODO Auto-generated method stub

	}

	public void onIncluir(Object objeto) {
		// TODO Auto-generated method stub
		txtNombre.setEnabled(true);
		txtDescripcion.setEnabled(true);
		txtSpring.setEnabled(true);
		txtClase.setEnabled(true);
		
		cmbTipo.setEnabled(true);
		cmbDespliegue.setEnabled(true);
		txtAccesoRapido.setEnabled(true);

		dblFunciones.setEnabled(true);
		dblGrupos.setEnabled(true);
		txtAyuda.setEnabled(true);
		icono.setEnabled(true);

	}

	public void onInicializar() {
		// TODO Auto-generated method stub

		// txtNombre.setText(transaccion.getNombre());
		// txtDescripcion.setText(transaccion.getDescripcion());
		// txtSpring.setText(transaccion.getSpring());
		// txtClase.setText(transaccion.getClase());

		txtNombre.setBinding(transaccion, "nombre");
		txtDescripcion.setBinding(transaccion, "descripcion");
		txtSpring.setBinding(transaccion, "spring");
		txtClase.setBinding(transaccion, "clase");
		txtAyuda.setText(transaccion.getAyuda());
		
		txtAccesoRapido.setBinding(transaccion, "accesorapido");


		List disponibles = servicioAdministrarCarpetas
				.buscarOperacionesDisponibles(transaccion);
		dblFunciones.setDatosOrigen(disponibles);
		ArrayList lstOperaciones = new ArrayList(transaccion.getOperaciones());
		dblFunciones.setDatosDestino(lstOperaciones);
		
		
		List gruposDisponibles = servicioAdministrarCarpetas.buscarGruposDisponibles(transaccion);
		dblGrupos.setDatosOrigen(gruposDisponibles);
		ArrayList lstGrupos = new ArrayList(transaccion.getGrupos());
		dblGrupos.setDatosDestino(lstGrupos);


		icono.setBinding(transaccion.getIcono(), "contenido");
		
		List tiposTransaccion = servicioAdministrarCarpetas.buscarTiposTransaccion();
		cmbTipo.setBinding(tiposTransaccion, transaccion, "tipoTransaccion");
		
		List tiposDespliegue = servicioAdministrarCarpetas.buscarTiposDespliegue();
		cmbDespliegue.setBinding(tiposDespliegue, transaccion, "tipoDespliegue");
		
		if (transaccion.getCarpeta() != null) {
			lblNombreDepende.setText(transaccion.getCarpeta().getNombre() + "  ("
					+ transaccion.getCarpeta().getRuta() + ")");
		}


	}

	public void onModificar(Object objeto) {
		// TODO Auto-generated method stub
		txtNombre.setEnabled(true);
		txtDescripcion.setEnabled(true);
		txtSpring.setEnabled(true);
		txtClase.setEnabled(true);
		txtAccesoRapido.setEnabled(true);

		
		cmbTipo.setEnabled(true);
		cmbDespliegue.setEnabled(true);

		dblFunciones.setEnabled(true);
		dblGrupos.setEnabled(true);
		txtAyuda.setEnabled(true);
		icono.setEnabled(true);

	}

	private Transaccion transaccion;

	public void onObjetoEntidad(Object objeto) {
		// TODO Auto-generated method stub
		this.transaccion = (Transaccion) objeto;

	}

	public boolean onValidarDatos(Object objeto, TipoFuncion tipo, String nombre) {
		// TODO Auto-generated method stub
		servicioAdministrarCarpetas.validar(transaccion);
		return true;
	}

	/**
	 * Configures initial state of component. WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		TabPane tabPane1 = new TabPane();
		tabPane1.setActiveTabIndex(0);
		tabPane1.setStyleName("Obelisco.TabPane");
		add(tabPane1);
		Column colDatos = new Column();
		colDatos.setInsets(new Insets(new Extent(5, Extent.PX)));
		TabPaneLayoutData colDatosLayoutData = new TabPaneLayoutData();
		colDatosLayoutData.setTitle("Datos Generales");
		colDatos.setLayoutData(colDatosLayoutData);
		tabPane1.add(colDatos);
		Grid grdDatos = new Grid();
		grdDatos.setStyleName("Obelisco.Grid");
		ColumnLayoutData grdDatosLayoutData = new ColumnLayoutData();
		grdDatosLayoutData.setInsets(new Insets(new Extent(5, Extent.PX),
				new Extent(10, Extent.PX)));
		grdDatos.setLayoutData(grdDatosLayoutData);
		colDatos.add(grdDatos);
		
		Label lblNombre = new Label();
		lblNombre.setText("Nombre");
		grdDatos.add(lblNombre);
		
		txtNombre = new BindingTextField(200);
		grdDatos.add(txtNombre);
		
		Label lblDescripcion = new Label();
		lblDescripcion.setText("Descripcion");
		GridLayoutData lblDescripcionLayoutData = new GridLayoutData();
		lblDescripcionLayoutData.setAlignment(new Alignment(Alignment.LEFT,
				Alignment.TOP));
		lblDescripcion.setLayoutData(lblDescripcionLayoutData);
		grdDatos.add(lblDescripcion);
		
		txtDescripcion = new BindingTextArea(300, 50);
		grdDatos.add(txtDescripcion);
		
		Label lblDepende = new Label();
		lblDepende.setText("Depende de");
		grdDatos.add(lblDepende);
		
		lblNombreDepende = new com.obelisco.vista.controles.Label();
		grdDatos.add(lblNombreDepende);
		
		Label lblClase = new Label();
		lblClase.setText("Clase");
		grdDatos.add(lblClase);
		txtClase = new BindingTextField(200);
		grdDatos.add(txtClase);

		Label lblSpring = new Label();
		lblSpring.setText("Nombre Spring");
		grdDatos.add(lblSpring);
		txtSpring = new BindingTextField(200);
		grdDatos.add(txtSpring);
		
		Label lblAcceso = new Label();
		lblAcceso.setText("Acceso Rapido");
		grdDatos.add(lblAcceso);
		txtAccesoRapido = new BindingTextField(200);
		grdDatos.add(txtAccesoRapido);
		
		Label lblTipo = new Label();
		lblTipo.setText("Tipo");
		grdDatos.add(lblTipo);
		cmbTipo = new BindingSelectField(200);
		grdDatos.add(cmbTipo);
		Label lblDespliegue = new Label();
		lblDespliegue.setText("Despliegue");
		grdDatos.add(lblDespliegue);
		cmbDespliegue = new BindingSelectField(200);
		grdDatos.add(cmbDespliegue);

		ContentPane paneLogo = new ContentPane();
		TabPaneLayoutData paneLogoLayoutData = new TabPaneLayoutData();
		paneLogoLayoutData.setTitle("Logo");
		paneLogo.setLayoutData(paneLogoLayoutData);

		icono = new PaneSubirImagen();
		paneLogo.add(icono);

		tabPane1.add(paneLogo);

		ContentPane paneFunciones = new ContentPane();
		TabPaneLayoutData paneFuncionesLayoutData = new TabPaneLayoutData();
		paneFuncionesLayoutData.setTitle("Funciones");
		paneFunciones.setLayoutData(paneFuncionesLayoutData);
		dblFunciones = new DobleLista();
		dblFunciones.setLabelOrigen("Funciones Disponibles");
		dblFunciones.setLabelDestino("Funciones Asignados");
		paneFunciones.add(dblFunciones);
		tabPane1.add(paneFunciones);

		ContentPane panePermisos = new ContentPane();
		TabPaneLayoutData panePermisosLayoutData = new TabPaneLayoutData();
		panePermisosLayoutData.setTitle("Permisos");
		panePermisos.setLayoutData(panePermisosLayoutData);
		dblGrupos = new DobleLista();
		dblGrupos.setLabelOrigen("Grupos Disponibles");
		dblGrupos.setLabelDestino("Grupos Asignados");
		panePermisos.add(dblGrupos);
		tabPane1.add(panePermisos);

		ContentPane paneAyuda = new ContentPane();
		TabPaneLayoutData paneAyudaLayoutData = new TabPaneLayoutData();
		paneAyudaLayoutData.setTitle("Ayuda");
		paneAyuda.setLayoutData(paneAyudaLayoutData);
		tabPane1.add(paneAyuda);
		txtAyuda = new RichTextArea();
		txtAyuda.setWidth(new Extent(600,Extent.PX));
		txtAyuda.setInsets(new Insets(new Extent(5,Extent.PX)));
		paneAyuda.add(txtAyuda);
	}

	public IServicioAdministrarCarpetas getServicioAdministrarCarpetas() {
		return servicioAdministrarCarpetas;
	}

	public void setServicioAdministrarCarpetas(
			IServicioAdministrarCarpetas servicioAdministrarCarpetas) {
		this.servicioAdministrarCarpetas = servicioAdministrarCarpetas;
	}

	public void onListaParametros(List arg0) {
		// TODO Auto-generated method stub
		
	}
}
